home *** CD-ROM | disk | FTP | other *** search
/ Aminet 41 / Aminet 41 (2001)(Schatztruhe)[!][Feb 2001].iso / Aminet / util / moni / PowerTools.lha / PowerTools / PowerTools.s < prev    next >
Text File  |  2000-12-31  |  6KB  |  313 lines

  1.     include     devices/timer.i
  2.     include     dos/datetime.i
  3.     include     dos/dos.i
  4.     include     exec/io.i
  5.     include     exec/exec_lib.i
  6.     include     graphics/graphics_lib.i
  7.     include     libraries/dos_lib.i
  8.  
  9.     lea     dosname(pc),a1
  10.     move.l     #36,d0
  11.     CALLEXEC OpenLibrary
  12.     move.l     #ERROR_INVALID_RESIDENT_LIBRARY,d3
  13.     move.l     d0,dosbase
  14.     beq     doserr
  15.     move.b     #-1,d0
  16.     jsr     _LVOAllocSignal(a6)
  17.     move.b     d0,signum
  18.     move.l     #ERROR_NO_FREE_STORE,d3
  19.     beq     sigerr
  20.     jsr     _LVOCreateMsgPort(a6)
  21.     move.l     #ERROR_NO_FREE_STORE,d3
  22.     move.l     d0,msgport
  23.     beq     mperror
  24.     move.l     d0,a0
  25.     move.l     #IOTV_SIZE,d0
  26.     jsr     _LVOCreateIORequest(a6)
  27.     move.l     d0,ioreq
  28.     beq     reqerr
  29.     move.l     d0,a1
  30.     lea     devname(pc),a0
  31.     moveq.l     #UNIT_VBLANK,d0
  32.     clr.l     d1
  33.     jsr     _LVOOpenDevice(a6)
  34.     tst.l     d0
  35.     bne     deverr
  36.     move.l     #argstr,d1
  37.     move.l     #tmpname,d2
  38.     clr.l     d3
  39.     move.l     dosbase(pc),a6
  40.     jsr     _LVOReadArgs(a6)
  41.     move.l     d0,rdargs
  42.     jsr     _LVOIoErr(a6)
  43.     move.l     d0,d3
  44.     tst.l     rdargs
  45.     beq     argserr
  46.     move.l     #0,a1
  47.     CALLEXEC FindTask
  48.     move.l     d0,sigtask
  49.     move.l     #days,d1
  50.     move.l     dosbase(pc),a6
  51.     jsr     _LVODateStamp(a6)
  52.     move.l     logname(pc),d1
  53.     move.l     #MODE_READWRITE,d2
  54.     move.l     dosbase(pc),a6
  55.     jsr     _LVOOpen(a6)
  56.     move.l     d0,logfile
  57.     jsr     _LVOIoErr(a6)
  58.     move.l     d0,d3
  59.     move.l     logfile(pc),d1
  60.     tst.l     d1
  61.     beq     logerr
  62.     move.l     #volume1,d2
  63.     move.l     #33,d3
  64.     jsr     _LVONameFromFH(a6)
  65.     lea     volume1(pc),a0
  66.     bsr     finddn
  67.     move.l     logfile(pc),d1
  68.     clr.l     d2
  69.     move.l     #OFFSET_END,d3
  70.     jsr     _LVOSeek(a6)
  71.     bsr     putdate
  72.     move.l     logfile(pc),d1
  73.     move.l     #starttx,d2
  74.     jsr     _LVOFPuts(a6)
  75.     move.l     tmpname(pc),d1
  76.     move.l     #MODE_READWRITE,d2
  77.     move.l     dosbase(pc),a6
  78.     jsr     _LVOOpen(a6)
  79.     move.l     d0,tmpfile
  80.     jsr     _LVOIoErr(a6)
  81.     move.l     d0,d3
  82.     move.l     tmpfile(pc),d1
  83.     tst.l     d1
  84.     beq     tmperr2
  85.     move.l     #volume2,d2
  86.     move.l     #33,d3
  87.     jsr     _LVONameFromFH(a6)
  88.     lea     volume2(pc),a0
  89.     bsr     finddn
  90.     move.l     tmpfile(pc),d1
  91.     move.l     #days,d2
  92.     move.l     #12,d3
  93.     jsr     _LVORead(a6)
  94.     tst.l     d0
  95.     beq     normal
  96.     bsr     putdate
  97.     move.l     logfile(pc),d1
  98.     move.l     #warntxt,d2
  99.     jsr     _LVOFPuts(a6)
  100. normal    move.l     tmpfile(pc),d1
  101.     jsr     _LVOClose(a6)
  102.     move.l     logfile(pc),d1
  103.     jsr     _LVOClose(a6)
  104.     move.l     4.w,a1
  105.     move.w     #_LVOColdReboot,a0
  106.     move.l     #newcrb,d0
  107.     move.l     a1,a6
  108.     jsr     _LVOSetFunction(a6)
  109.     move.l     d0,oldcrb
  110. loop    move.l     #days,d1
  111.     move.l     dosbase(pc),a6
  112.     jsr     _LVODateStamp(a6)
  113.     move.l     tmpname(pc),d1
  114.     move.l     #MODE_NEWFILE,d2
  115.     jsr     _LVOOpen(a6)
  116.     move.l     d0,tmpfile
  117.     beq     tmperr
  118.     move.l     d0,d1
  119.     move.l     #days,d2
  120.     move.l     #12,d3
  121.     jsr     _LVOWrite(a6)
  122.     move.l     tmpfile(pc),d1
  123.     jsr     _LVOClose(a6)
  124. tmperr    move.l     ioreq(pc),a1
  125.     move.w     #TR_ADDREQUEST,IO_COMMAND(a1)
  126.     move.l     delay(pc),a0
  127.     move.l     (a0),IOTV_TIME+TV_SECS(a1)
  128.     move.l     #0,IOTV_TIME+TV_MICRO(a1)
  129.     CALLEXEC SendIO
  130.     move.l     msgport(pc),a0
  131.     move.b     MP_SIGBIT(a0),d1
  132.     move.l     #SIGBREAKF_CTRL_C,d0
  133.     bset.l     d1,d0
  134.     move.b     signum(pc),d1
  135.     bset.l     d1,d0
  136.     jsr     _LVOWait(a6)
  137.     btst.l     #SIGBREAKB_CTRL_C,d0
  138.     bne     quit
  139.     move.b     signum(pc),d1
  140.     btst.l     d1,d0
  141.     bne     reboot
  142.     move.l     ioreq(pc),a1
  143.     jsr     _LVOWaitIO(a6)
  144.     beq     loop
  145. quit    move.l     a6,a1
  146.     move.w     #_LVOColdReboot,a0
  147.     move.l     oldcrb(pc),d0
  148.     jsr     _LVOSetFunction(a6)
  149.     move.l     ioreq(pc),a1
  150.     jsr     _LVOAbortIO(a6)
  151.     move.l     ioreq(pc),a1
  152.     jsr     _LVOWaitIO(a6)
  153.     move.l     #days,d1
  154.     move.l     dosbase(pc),a6
  155.     jsr     _LVODateStamp(a6)
  156.     move.l     logname(pc),d1
  157.     move.l     #MODE_READWRITE,d2
  158.     move.l     dosbase(pc),a6
  159.     jsr     _LVOOpen(a6)
  160.     move.l     d0,logfile
  161.     beq     logerr2
  162.     move.l     d0,d1
  163.     clr.l     d2
  164.     move.l     #OFFSET_END,d3
  165.     jsr     _LVOSeek(a6)
  166.     bsr     putdate
  167.     move.l     logfile(pc),d1
  168.     move.l     #quittxt,d2
  169.     jsr     _LVOFPuts(a6)
  170.     move.l     logfile(pc),d1
  171.     jsr     _LVOClose(a6)
  172. logerr2    move.l     tmpname(pc),d1
  173.     jsr     _LVODeleteFile(a6)
  174.     clr.l     d3
  175.     bra     logerr
  176. tmperr2    move.l     logfile(pc),d1
  177.     jsr     _LVOClose(a6)
  178. logerr    move.l     rdargs(pc),d1
  179.     jsr     _LVOFreeArgs(a6)
  180. argserr    move.l     ioreq(pc),a1
  181.     CALLEXEC CloseDevice
  182. deverr    move.l     ioreq(pc),a0
  183.     jsr     _LVODeleteIORequest(a6)
  184. reqerr    move.l     msgport(pc),a0
  185.     jsr     _LVODeleteMsgPort(a6)
  186. mperror    move.b     signum(pc),d0
  187.     jsr     _LVOFreeSignal(a6)
  188. sigerr    move.l     d3,d1
  189.     clr.l     d2
  190.     move.l     dosbase(pc),a6
  191.     jsr     _LVOPrintFault(a6)
  192.     move.l     dosbase(pc),a1
  193.     CALLEXEC CloseLibrary
  194. doserr    move.l     d3,d0
  195.     rts
  196. reboot    move.l     #days,d1
  197.     move.l     dosbase(pc),a6
  198.     jsr     _LVODateStamp(a6)
  199.     move.l     logname(pc),d1
  200.     move.l     #MODE_READWRITE,d2
  201.     move.l     dosbase(pc),a6
  202.     jsr     _LVOOpen(a6)
  203.     move.l     d0,logfile
  204.     beq     logerr3
  205.     move.l     d0,d1
  206.     clr.l     d2
  207.     move.l     #OFFSET_END,d3
  208.     jsr     _LVOSeek(a6)
  209.     bsr     putdate
  210.     move.l     logfile(pc),d1
  211.     move.l     #rebtxt,d2
  212.     jsr     _LVOFPuts(a6)
  213.     move.l     logfile(pc),d1
  214.     jsr     _LVOClose(a6)
  215. logerr3    move.l     tmpname(pc),d1
  216.     jsr     _LVODeleteFile(a6)
  217.     move.l     #volume1,d1
  218.     jsr     _LVOInhibit(a6)
  219.     lea     volume1(pc),a0
  220.     lea     volume2(pc),a1
  221. comp    move.b     (a0)+,d0
  222.     move.b     (a1)+,d1
  223.     cmp.b     d0,d1
  224.     bne     differ
  225.     tst.b     d0
  226.     bne     comp
  227.     bra     same
  228. differ    move.l     #volume2,d1
  229.     jsr     _LVOInhibit(a6)
  230. same    tst.l     fix39(pc)
  231.     beq     nofix39
  232.     lea     gfxname(pc),a1
  233.     clr.l     d0
  234.     CALLEXEC OpenLibrary
  235.     tst.l     d0
  236.     beq     nofix39
  237.     move.l     d0,a6
  238.     sub.l     a1,a1
  239.     jsr     _LVOLoadView(a6)
  240.     jsr     _LVOWaitTOF(a6)
  241.     jsr     _LVOWaitTOF(a6)
  242. nofix39    move.l     oldcrb(pc),a0
  243.     move.l     4.w,a6
  244.     jmp     (a0)
  245. putdate    move.l     #days,d1
  246.     jsr     _LVODateToStr(a6)
  247.     move.l     logfile(pc),d1
  248.     move.l     #strday,d2
  249.     jsr     _LVOFPuts(a6)
  250.     move.l     logfile(pc),d1
  251.     move.l     #strdate,d2
  252.     jsr     _LVOFPuts(a6)
  253.     move.l     logfile(pc),d1
  254.     move.l     #strtime,d2
  255.     jmp     _LVOFPuts(a6)
  256. finddn    move.b     (a0)+,d0
  257.     cmp.b     #':',d0
  258.     bne     finddn
  259.     clr.b     (a0)
  260.     rts
  261. newcrb    move.l     sigtask(pc),a1
  262.     clr.l     d0
  263.     move.b     signum(pc),d1
  264.     bset.l     d1,d0
  265.     CALLEXEC Signal
  266.     clr.l     d0
  267.     jmp     _LVOWait(a6)
  268.  
  269. dosbase    dc.l     0
  270. msgport    dc.l     0
  271. ioreq    dc.l     0
  272. rdargs    dc.l     0
  273. tmpname    dc.l     0
  274. logname    dc.l     0
  275. delay    dc.l     0
  276. fix39    dc.l     0
  277. days    dc.l     0
  278. minutes    dc.l     0
  279. ticks    dc.l     0
  280.     dc.b     FORMAT_DOS
  281.     dc.b     0
  282.     dc.l     strday
  283.     dc.l     strdat2
  284.     dc.l     strtim2
  285. logfile    dc.l     0
  286. tmpfile    dc.l     0
  287. oldcrb    dc.l     0
  288. sigtask    dc.l     0
  289. signum    dc.b     0
  290.  
  291.     dc.b     0,'$VER:PowerTools v1.2 (31.12.2000)'
  292.     dc.b     $0A,'by Pavel Fedin <sonic@sonic.misa.ac.ru>',0
  293. dosname    dc.b     'dos.library',0
  294. gfxname    dc.b     'graphics.library',0
  295. devname    dc.b     'timer.device',0
  296. argstr    dc.b     'TIMEFILE/A,LOGFILE/A,DELAY/N,FIX39/S',0
  297. starttx    dc.b     ' - system started.',$0A,0
  298. warntxt    dc.b     ' - system failure detected.',$0A,0
  299. quittxt    dc.b     ' - BREAK signal received, logger exited.',$0A,0
  300. rebtxt    dc.b     ' - system rebooting.',$0A,0
  301.  
  302. strday    dcb.b     LEN_DATSTRING
  303.     dc.b     0
  304. strdate    dc.b     ' '
  305. strdat2    dcb.b     LEN_DATSTRING
  306.     dc.b     0
  307. strtime    dc.b     ' '
  308. strtim2    dcb.b     LEN_DATSTRING
  309.     dc.b     0
  310. volume1    dcb.b     33
  311.     dc.b     0
  312. volume2    dcb.b     33
  313.     dc.b     0